package com.seminario.spring.manager;

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.seminario.spring.domain.Mensaje;
import com.seminario.spring.domain.Muro;
import com.seminario.spring.domain.Perfil;
import com.seminario.spring.dto.AmigoDTO;
import com.seminario.spring.dto.MensajeDTO;
import com.seminario.spring.dto.MuroDTO;
import com.seminario.spring.service.CaraLibroService;
import com.seminario.spring.service.UserService;
import com.seminario.spring.util.ContextoUtil;
@Service
public class CaraLibroManagerImpl  implements CaraLibroManager{

	@Autowired
	private CaraLibroService caraLibroService;
	@Autowired
	private ContextoUtil contextoUtil;
	@Autowired
	private UserService userService;
	
	@Override
	@Transactional(readOnly=true)
	public List<AmigoDTO> getAmigos() {
		Perfil usuarioActual = contextoUtil.getUsuarioActual();
		List<Perfil> amigos = caraLibroService.getAmigos(usuarioActual.getId());
		List<AmigoDTO> amigoDTOs = new ArrayList<AmigoDTO>();
		for (Perfil perfil : amigos) {
			AmigoDTO amigoDTO = new AmigoDTO();
			amigoDTO.setId(perfil.getId());
			amigoDTO.setNombreYApellido(perfil.getUser().getFirstname() + " " + perfil.getUser().getLastname());
			amigoDTOs.add(amigoDTO);
		}
		return amigoDTOs;
	}

	@Override
	@Transactional
	public MuroDTO getMuro(Integer perfilId) {
		
		Perfil perfil;
		if(perfilId != null){
			perfil = userService.getPerfilById(perfilId);
		}else{
			perfil = contextoUtil.getUsuarioActual();
		}
		Muro muro = caraLibroService.getMuro(perfil);
		
		MuroDTO muroDTO = new MuroDTO();
		List<MensajeDTO> mensajesDTO = new ArrayList<MensajeDTO>();
		String murode = muro.getPerfil().getUser().getFirstname() + " " + muro.getPerfil().getUser().getLastname();
		muroDTO.setMurode(murode);
		muroDTO.setMuroId(muro.getId());
		List<Mensaje> mensajes = muro.getMensajes();
		if(mensajes!=null || mensajes.isEmpty()){
			for (Mensaje mensaje : mensajes) {
				MensajeDTO mensajeDTO = new MensajeDTO();
				String nombre = mensaje.getCreador().getUser().getFirstname() + " " + mensaje.getCreador().getUser().getLastname();
				mensajeDTO.setCreador(nombre);
				mensajeDTO.setIdCreador(mensaje.getCreador().getId());
				mensajeDTO.setMensaje(mensaje.getMensaje());
				mensajeDTO.setFecha(mensaje.getFecha());
				mensajesDTO.add(mensajeDTO);
			}
			muroDTO.setMensajes(mensajesDTO);
		}
		
		return muroDTO;
	}

	@Override
	public void guardarMensaje(Integer muroId, String mensaje) {
		Muro muro = caraLibroService.getMuro(muroId);
		Mensaje m = new Mensaje();
		m.setCreador(contextoUtil.getUsuarioActual());
		m.setFecha((GregorianCalendar) GregorianCalendar.getInstance());
		m.setMuro(muro);
		m.setMensaje(mensaje);
		caraLibroService.guardarMensaje(m);
	}

}
